home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************
- ** **
- ** Module: QD3DExtension.h **
- ** **
- ** **
- ** Purpose: QuickDraw 3D Plug-in Architecture **
- ** **
- ** **
- ** **
- ** Copyright (C) 1992-1996 Apple Computer, Inc. All rights reserved. **
- ** **
- ** **
- *****************************************************************************/
- #ifndef QD3DExtension_h
- #define QD3DExtension_h
-
- #if PRAGMA_ONCE
- #pragma once
- #endif
-
- #include "QD3DErrors.h"
-
- #if defined(THINK_C) || defined(__SC__)
- #pragma options(!pack_enums, !align_arrays)
- #pragma SC options align=power
- #elif defined(__MWERKS__)
- #pragma enumsalwaysint on
- #pragma align_array_members off
- #pragma options align=native
- #elif defined(__PPCC__)
- #pragma options align=power
- #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
- #pragma options enum=int
- #endif
-
- #ifdef __cplusplus
- extern "C" {
- #endif /* __cplusplus */
-
- /******************************************************************************
- ** **
- ** Constants **
- ** **
- *****************************************************************************/
-
- #if defined(OS_MACINTOSH) && OS_MACINTOSH
-
- #define kQ3ExtensionMacCreatorType Q3_OBJECT_TYPE('Q','3','X','T')
- #define kQ3ExtensionMacFileType Q3_OBJECT_TYPE('s','h','l','b')
-
- #endif /* OS_MACINTOSH */
-
- /******************************************************************************
- ** **
- ** Types **
- ** **
- *****************************************************************************/
- #if defined(ESCHER_VER_15) && ESCHER_VER_15
- typedef struct TQ3ExtensionPrivate *TQ3Extension;
- #endif /* ESCHER_VER_15 */
-
- /******************************************************************************
- ** **
- ** Macros **
- ** **
- *****************************************************************************/
-
- #define Q3ObjectClassVersion(major, minor) \
- (unsigned long) (((major) << 16) | (minor))
-
- /******************************************************************************
- ** **
- ** Object Method types **
- ** **
- *****************************************************************************/
-
- #define kQ3MethodTypeObjectClassVersion Q3_METHOD_TYPE('v','r','s','n')
- typedef unsigned long TQ3ObjectClassVersion;
-
- #define kQ3MethodTypeObjectClassRegister Q3_METHOD_TYPE('r','g','s','t')
- typedef TQ3Status (*TQ3ObjectClassRegisterMethod)(
- TQ3ObjectClass objectClass,
- void *classPrivate);
-
- #define kQ3MethodTypeObjectClassReplace Q3_METHOD_TYPE('r','g','r','p')
- typedef void (*TQ3ObjectClassReplaceMethod)(
- TQ3ObjectClass oldObjectClass,
- void *oldClassPrivate,
- TQ3ObjectClass newObjectClass,
- void *newClassPrivate);
-
- #define kQ3MethodTypeObjectClassUnregister Q3_METHOD_TYPE('u','n','r','g')
- typedef void (*TQ3ObjectClassUnregisterMethod)(
- TQ3ObjectClass objectClass,
- void *classPrivate);
-
- #define kQ3MethodTypeObjectNew Q3_METHOD_TYPE('n','e','w','o')
- typedef TQ3Status (*TQ3ObjectNewMethod)(
- TQ3Object object,
- void *privateData,
- void *parameters);
-
- #define kQ3MethodTypeObjectDelete Q3_METHOD_TYPE('d','l','t','e')
- typedef void (*TQ3ObjectDeleteMethod)(
- TQ3Object object,
- void *privateData);
-
- #define kQ3MethodTypeObjectPeek Q3_METHOD_TYPE('p','e','e','k')
- typedef void *(*TQ3ObjectPeekMethod)(
- TQ3Object object);
-
- #define kQ3MethodTypeObjectCopy Q3_METHOD_TYPE('c','p','y','o')
- typedef TQ3Status (*TQ3ObjectCopyMethod)(
- TQ3Object fromObject,
- const void *fromPrivateData,
- TQ3Object toObject,
- const void *toPrivateData);
-
- /* TODO: Move these to QD3DIO.h */
- #define kQ3MethodTypeObjectRead Q3_METHOD_TYPE('r','e','a','d')
- typedef TQ3Object (*TQ3ObjectReadMethod)(
- TQ3FileObject file);
-
- typedef TQ3Status (*TQ3ObjectTraverseDataMethod)(
- TQ3Object object,
- void *data,
- TQ3ViewObject view);
-
- #define kQ3MethodTypeObjectAttach Q3_METHOD_TYPE('a','t','t','c')
- typedef TQ3Status (*TQ3ObjectAttachMethod)(
- TQ3Object childObject,
- TQ3Object parentObject);
-
- /******************************************************************************
- ** **
- ** Object Hierarchy Registration **
- ** **
- *****************************************************************************/
-
- /*
- Q3ObjectHierarchy_RegisterClass
-
- Register an object class in the QuickDraw 3D hierarchy.
-
- parentType - an existing type in the hierarchy, or 0 to subclass
- TQ3Object
- objectType - the new object class type, used in the binary metafile
- objectName - the new object name, used in the text metafile
- metaHandler - a TQ3MetaHandler (may be NULL for some classes) which
- returns non-virtual methods
- virtualMetaHandler - a TQ3MetaHandler (may be NULL as well) which returns
- virtual methods a child would inherit
- methodsSize - the size of the class data needed (see
- GetClassPrivate calls below)
- instanceSize - the size of the object instance data needed (see
- GetPrivate calls below)
- */
- TQ3ObjectClass Q3ObjectHierarchy_RegisterClass(
- TQ3ObjectType parentType,
- TQ3ObjectType objectType,
- char *objectName,
- TQ3MetaHandler metaHandler,
- TQ3MetaHandler virtualMetaHandler,
- unsigned long methodsSize,
- unsigned long instanceSize);
-
- /*
- Q3ObjectHierarchy_UnregisterClass
-
- Identical to Q3ObjectClass_Unregister. Returns kQ3Failure if the
- objectClass still has objects around; the class remains registered.
- */
- TQ3Status Q3ObjectHierarchy_UnregisterClass(
- TQ3ObjectClass objectClass);
-
- /*
- Q3ObjectHierarchy_GetMethod
-
- For use in TQ3ObjectClassRegisterMethod call
- */
- TQ3FunctionPointer Q3ObjectHierarchy_GetMethod(
- TQ3ObjectClass objectClass,
- TQ3MethodType methodType);
-
- /*
- Q3ObjectHierarchy_NewObject
-
- To create a new object. Parameters is passed into the
- TQ3ObjectNewMethod as the "parameters" parameter.
- */
- TQ3Object Q3ObjectHierarchy_NewObject(
- TQ3ObjectClass objectClass,
- void *parameters);
-
- /*
- Q3ObjectClass_GetLeafType
-
- Return the leaf type of a class.
- */
- TQ3ObjectType Q3ObjectClass_GetLeafType(
- TQ3ObjectClass objectClass);
-
- /*
- Q3ObjectClass_GetSubClassType
- Q3Object_GetSubClassType
-
- Return the subclass type of "targetObject" or "targetObjectClass"
-
- Used for "GetType" calls for a particular class. e.g.
-
- Q3Geometry_GetType would be implemented:
-
- TQ3ObjectType Q3Geometry_GetType(
- TQ3GeometryObject object)
- {
- return Q3ObjectHierarchy_GetObjectType(gGeometryClass, object);
- }
-
- where gGeometryClass is the geometry object class, and "object" is
- a subclass of the geometry class. The type returned is the "direct"
- subclass type of the geometry.
- */
- TQ3ObjectType Q3ObjectClass_GetSubClassType(
- TQ3ObjectClass objectClass,
- TQ3ObjectClass targetObjectClass);
-
- TQ3ObjectType Q3Object_GetSubClassType(
- TQ3ObjectClass objectClass,
- TQ3Object targetObject);
-
- TQ3ObjectClass Q3ObjectHierarchy_FindClassByType(
- TQ3ObjectType type);
-
- /*
- Q3Object_GetClassPrivate
- Q3ObjectClass_GetClassPrivate
-
- Return pointers to private class data, a block of methodsSize bytes, from
- the Q3ObjectHierarchy_RegisterClass call.
-
- If methodsSize was zero, NULL is always returned.
- */
- void *Q3Object_GetClassPrivate(
- TQ3ObjectClass objectClass,
- TQ3Object targetObject);
-
- void *Q3ObjectClass_GetClassPrivate(
- TQ3ObjectClass objectClass,
- TQ3ObjectClass targetObjectClass);
-
- /*
- Q3Object_GetPrivate
-
- Return a pointer to private instance data, a block of instanceSize bytes,
- from the Q3ObjectHierarchy_RegisterClass call.
-
- If instanceSize was zero, NULL is always returned.
- */
- void *Q3Object_GetPrivate(
- TQ3ObjectClass objectClass,
- TQ3Object targetObject);
-
- /******************************************************************************
- ** **
- ** Posting Errors **
- ** **
- ** You may only call these functions from within an extension **
- ** **
- *****************************************************************************/
-
- /*
- Q3Error_Post
-
- Post a QuickDraw 3D Error.
- */
- QD3D_EXPORT void Q3Error_Post(
- TQ3Error error);
-
- #if defined(OS_MACINTOSH) && OS_MACINTOSH
-
- /*
- Q3MacintoshError_Post
-
- Post the QuickDraw 3D Error, kQ3ErrorMacintoshError, and the Macintosh
- OSErr macOSErr. (Retrieved with Q3MacintoshError_Get)
- */
- QD3D_EXPORT void Q3MacintoshError_Post(
- OSErr macOSErr);
-
- #endif /* OS_MACINTOSH */
-
- /******************************************************************************
- ** **
- ** Public API **
- ** **
- *****************************************************************************/
-
- #if defined(ESCHER_VER_15) && ESCHER_VER_15
-
- QD3D_EXPORT TQ3Extension Q3Extension_GetFirst(
- void);
-
- QD3D_EXPORT TQ3Extension Q3Extension_GetNext(
- TQ3Extension extension);
-
- QD3D_EXPORT TQ3Status Q3Extension_Load(
- TQ3Extension extension);
-
- QD3D_EXPORT TQ3ObjectType Q3Extension_GetParentType(
- TQ3Extension extension);
-
- QD3D_EXPORT TQ3ObjectType Q3Extension_GetLeafType(
- TQ3Extension extension);
-
- QD3D_EXPORT TQ3StringObject Q3Extension_GetName(
- TQ3Extension extension);
-
- #endif /* ESCHER_VER_15 */
-
- #ifdef __cplusplus
- }
- #endif /* __cplusplus */
-
- #if defined(__MWERKS__)
- #pragma enumsalwaysint reset
- #elif defined(__xlc) || defined(__xlC) || defined(__xlC__) || defined(__XLC121__)
- #pragma options enum=reset
- #endif
-
- #endif /* QD3DExtension_h */
-